═══ 1. Title Screen ═══ LH/2 converts a set of files into a single file. This single "file archive" is smaller than the sum of the original files, since data compression is used. LH/2 can later be used to extract the files in their original form. Since the "file archive" created by LH/2 stores related files in a single package, it is particularly well suited for transferring files through a modem. This will ensure that all necessary files are included, and that none were forgotten. Since LH/2 keeps a "check sum", it will also verify that the files were received correctly. As an added bonus, since the files are compressed, it will take less time to send the file. If the person on the receiving end does not have LH/2, the person sending may choose to turn the archive into a "self-extracting" executable program. ═══ 2. Copyright Notices ═══ (c) 1991-93 A:WARE Incorporated. by Peter Fitzsimmons All Rights Reserved. All commercial restrictions have been lifted with this 2.20 release. Although A:WARE Inc. still owns the source code, the executable is completely public domain. Any person or company can use it for internal use, software installation or distribution, backup, etc. A:WARE Inc. may soon, however, sell a "compression kit" for those companies that insist on having source code, or that want to build compression into their own OS/2 software installation/distribution programs. A:WARE Inc. 6056 Cayeswood Court Mississauga Ontario Canada L5V-1B1 Voice: (416)858-3222 FidoNet: 1:250/292 BBS Sol3: (416)858-8488 ═══ 2.1. Disclaimer ═══ DISCLAIMER The Program is supplied "AS IS" without any warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. In no event shall A:WARE INC be liable for any damages, either direct or consequential, caused by the use, or inability to use, this program, even if A:WARE INC has been advised of the possibility of such damages. ═══ 3. General Overview ═══ ═══ 3.1. Mandate, 32 bit version ═══ Mandate, 32 bit version. - Maintain the lh/2 tradition of an easy to use, free, public domain file format based archiver for OS/2. One of the reasons I wrote LH-ANSIC in the first place was because ARC/PAK/ZIP/ZOO/LHA were too complicated. I have resisted adding not-completely-necessary features in order to keep the "syntax screen" very small. Despite the drastic internal changes to LH/2, I am very pleased to report that I only added one command line switch (/E). - All commercial restrictions have been lifted with the 2.20 release. Although A:WARE Inc. still owns the source code, the executable will be completely public domain. Any person or company can use it for internal use, software installation or distribution, backup, etc. I may soon, however, sell a "compression kit" for those companies that insist on having source code, or that want to build compression into their own OS/2 software installation/distribution programs. ═══ 3.2. Program History ═══ LH/2 V2.19 32 bit beta. 92/12/17 Pre-Release 32 bit beta. Program history for this release will be covered under 'New Features' etc. LH 2.14 Mon 03-30-1992 Wow; two releases in the same month. Bending to popular demand (all two of you!), Lh2 will now preserve case. LH2 is still case insensitive when searching for files however. In compatability mode (/c), file names are stored in upper case. LH 2.13 Tue 03-10-1992 So solve a few problems with it's interaction with Squish, LH will now exit with a non-zero ERRORLEVEL if: 1) No files are extracted. 2) An invalid LZH header is encountered. Archives with -lh4- type files are now supported (for decompression) by using the -lh5- code, which seems to work fine. A new option: /m. This will cause only files with their archive bits set to be stored (during an ADD or MOVE operation). The archive bit is reset if all goes well. LH 2.12 During compression, LH 2.12 will recognize that there is no space left on a disk for '-lh5-' compression. (It always worked correctly for -lh1-). If a file with an unknown stowage is encountered, LH 2.12 will no longer stop at a prompt if the /o option is specified. Wed 05-22-1991 Version 2.11 is a very small bug fix. When Adding/Moving files, LH.EXE will now correctly exit with an ERROREVEL of 0 if successful. Original 2.00 Documentation (LH2.DOC), Mon 04-29-1991 Welcome to version 2.00 of LH2. The last version that most of you had access to was 0.80. I've jumped all the way to 2.00 so that an association can be made with LHA 2.x, the DOS program which LH2 is a clone of. With 0.80, I thought LH2 was "functionally stable"; But then Haruhiko Okumura had to go and create a better compression algorithm! This new version, 2.00, supports that new compression method and has a few other small changes as well. Notes: o This new version is (on many files) faster than the old version while compressing. It is always faster at decompression (2 to 3 times faster). Files that contain many repeated bytes/strings (such as text files) compress the fastest (almost as fast as Zip imploding). Files that are more random compress slower; a very large and very random file may compress slower than the old version of LH. o It is coded all in C, and is therefore slower than Yoshi's DOS version (LHA.EXE) which is coded in mostly assembly. My tests show LH2 to be a little more than 1/2 the speed while compressing, and about 2/3 the speed at decompressing. I can live with it. o /c causes LH2 to use the old -lh1- compression method that prior versions of LH2, and LHARC 1.x, used. o the new 'D' command erases files from an *.lzh archive. o When extracting files from an archive, the disk space for the destination file is allocated at the time the file is opened. This ensures that as little fragmentation as possible will occur on the file. o Specifying a drive with no directory (LH A FOO.LZH C:*.*) will use the root directory, rather than the current directory on that drive. Fixed. o The size of LH.EXE has grown quite a bit (from 38k to 48k) since it now has to support both the old and new compression/decompression code. o I've moved. My new phone number is near the bottom of this document. I've also added a disclaimer there. o The new compression code (for -lh5- compression) was lifted from AR02.LZH, by Haruhiko Okumura. Thanks once again Haruhiko! I can't make heads or tails of Yoshi's code. LH2.DOC, Mon 03-11-1991 Version 1.00 fixes a small bug: If you tried to L)ist the contents of an *.lzh file that did not exist, no error message was printed. LH2.DOC, Tue 01-08-1991 This version, 0.80, is the first release that supports EAs (Extended Attributes) and (to some degree) 'long' file names. If there are no problems with it, it will be renamed 1.00 and forgotten about. EAs are supported in the following manner. During the file search stage (where LH creates a list of all matching files to be sorted), a pseudo-archive named EA.LZH is created, if needed. Using the same names as the original files, EA.LZH contains the associated extended attributes. EA.LZH is placed in the archive along with the other files. Therefore, anyone who does not have this version of LH2 can still apply the EAs to their respective files by using the OS/2 EAUTIL.EXE file. A file named '!readme.ea' is imbedded in EA.LZH, which supplies instructions to achieve this. If you use this version of LH2 to extract archives (and do not use the /i switch), EA.LZH will be extracted automatically and applied to the files, then erased. Notes: o This version, and future versions, require OS/2 1.20 or newer. o Wildcards should work just like 1.20 wildcards. (Let me know if you find an inconsistency). o t = test option is new. o /i. This option causes EAs not to be stored for the Add and Move commands. When used with the eXtract command, /i causes EA.LZH to be extracted, but not applied or erased. o LH2 does not support directory EAs, only file EAs. o do NOT update an lzh file that was already stored with EAs (since ea.lzh will already be in the lzh file). o The EAs are applied after ALL of the files have been extracted. A side effect: If you do not extract a file that has an EA, by answering 'n' to the "File '' already exists. Overwrite?" prompt, the EA WILL STILL BE JOINED to the old file on your disk. o Longnames are supported -- sort of. The total length of a file name (including path) must be less than or equal to 74 bytes. Longnames are stored without modification in the lzh header, therefore they will fail to extract on a FAT partition and/or under DOS. Therefore, the onus is on the user to enforce normal (8.3) file names, so as not to inconvenience other users. It is HIGHLY recommended that you don't use longnames in files you upload to BBS's. LH2.DOC, Tue 03-06-1990 LH2 is an OS/2 clone of the MSDOS program LHARC. It is based on the source code I released as "LH-ANSIC.LZH", the ansi-c version of a simplified LHARC compatible compressor/decompressor. This program is the same as LH-ANSIC.LZH, with the following exceptions: o The Move command has been added. (ADD files, then erase them). o Wildcards are supported from the command line during an ADD/MOVE function. o The /s command will cause LH2 to "walk" down directory trees. For a complete list of functions, run LH.EXE without any arguments. NOTE: OS/2 1.20's long file names and EAs are *NOT* supported in this release. This would make the program incompatible with the original LHARC. I may change this in the near future though. Trying to "BIND" this program will cause unpredictable results when run in DOS mode. (DosFindFirst()/Next() can not be supported in DOS mode if used recursively). ═══ 3.3. Bug Fixes ═══ Bugs Fixed from 2.14 - will not abort when it can't open a file, such as SWAPPER.DAT, when compressing. - When compressing, /A (store file attributes (system, hidden, readably)) was unpredictable if the current dir was not the root dir. Fixed. - LH/2 now supports the maximum OS/2 path length: 260 bytes. As was documented, because of the design of the original *.LZH file header, LH/2 v2.14 could only handle file names that were 74 bytes or less. Unfortunately, LH/2 did not enforce this. If you saved a file > 74 bytes, the header "overflowed" into the file's data, destroying any chances of extracting the file. This only burned one person, to my knowledge (sorry Scott!). That incident just happened a few weeks ago, and is what got me working on LH/2 again! Long file names (> 64 bytes) are now stored differently. They are stored in an "extended header"; a feature that was new to LHA 2.00 (LHA is the dos program that LH/2 grew from). ═══ 3.4. New Features (ver 2.20) ═══ New Features (ver 2.20) - Support for file names up to 260 characters. - Extended Attributes (EA) are stored differently. The old way was to create a file named EA.LZH inside of the archive, which had an entry for each file that had an EA. This worked fine until you added a new file to an existing archive -- at which point the old EA.LZH would be wiped out with the new one. This will no longer happen. The new method is not compatible with old LH/2. For this reason, new LH/2 builds a batch file called "Apply-EA.Cmd" in the archive, which the end user could run to use OS/2's "eautil.exe" program to join the EAs to the just-extracted files. NOTE: Apply-EA.Cmd only works for files, not directories. If you want to remain compatible with old-lh/2, do not distribute LZH archives that have dirs in them. New LH/2 will recognize the old EA.LZH method, and apply the EAs accordingly. Skip ahead to the next point unless you care about the technical details of how EAs are now stored. All EAs are in 16 bit OS/2 format. Even OS/2 2.0's EAUTIL.EXE stores them in this format (probably for the same compatibility reasons that I did). There is only a slight difference in the way OS/2's "FEA2LIST" structure differs from OS/2 1.x's "FEALIST". Each file EA (directory EAs are stored differently) looks (to LHA/V2.14) as a normal file. An EA file is always stored in a subdirectory called EAS (this is true even if you did NOT use /s). For example: EAS\file1 -- this is the ea for file1 file1 -- this is file1 Src\EAS\file1 -- this is the ea for src\file1 src\file1 -- this is src\file1 I had originally discounted this method; if you used another archive program that changed the order of the files, everything would be broken. However, now I store (along with the EAS file) the name of the parent file in an extended header; so the actual name or order of the EAS\* file is irrelevant. LH/2 first extracts all non-ea files, than goes back to the beginning of the *.lzh file and "extracts" only EA files. The extended headers LH/2 supports are: Type Description 0 CRC of header + extended header (as apposed to simple checksum in normal *.lzh header). 1 Extended file name. 2 Extended dir name to which [extended] file name is appended. 79 (ascii 'O') --- LH/2 2.20 extension --- Name of Parent file this EA file applies to. The other method I was entertaining (storing the EA itself in an extended header) had a drawback that might hurt in the future: The maximum size of an extended header entry is 64K-2 bytes. EAs are currently limited to 64k, but that may change. - Directories are now stored as separate entities. This allows support for dirs that are empty, and dirs that have EAs. This is particularly important if you are trying to backup your OS/2 2.0 Desktop directories. This feature is enabled with the new /E option. A dir is only stored only when ALL of the following are true: 1) /s is used. 2) /e is used. 3) It has an EA or it is empty. Dirs that are not empty, nor have an EA, are not stored because there is no reason to store them. Those dirs will be created automatically when a file is extracted there. Skip ahead to the next point unless you care about the technical details of how dirs are now stored. Dirs without EAs are stored as zero length files. The LZH field for the file attribute is set to 0x10. Dirs with EAs are stored, as above, with attribute 0x10 set. However, the regular "file data" is actually the EA. Example: Original Packed Rat Date Time Attr Type CRC Name -------- -------- --- ------- -------- ------ ----- ---- ---------------- 1352 550 41% 92-12-17 3:54:38 .D.... -lh5- DBAA os!2 2.0 desktop Note that the 'D' bit is set. The extended attribute is, uncompressed, 1352 bytes. After decompressing this archive, a "DIR" command would list this: 12-13-92 3:36a 1352 os!2 2.0 desktop - All files created by LH/2, when extracting, use the pre-allocate feature of the DosOpen() api, thus reducing fragmentation. In fact, you could use LH/2 as a "poor man's de-fraggmenter" if you wanted. Fragmentation is not very significant with HPFS. - When adding files to an existing archive, LH/2 no longer assumes that the files are sorted. LH/2 now sorts files based on "dir + filename", rather than just "filename" as it did before. When new files are added to an existing archive, they are added at the end (if they are NEW to the archive; if they replace a file, they will be in the old file's position). - When /E is used, LH/2 will remove an empty dir even if no files from that dir were compressed. The old way only removed a dir if at least one file was compressed from it. ═══ 4. Program Documentation ═══ █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ █ Lh2 (Compress files) Peter Fitzsimmons 93/02/01 █ █ Version 2.20 █ █ Usage: LH [file1 file2 ...] [options] █ █ Purpose: Collect and compress files. █ █ Commands: A - Add files to archive. █ █ M - Move files to archive (erases files). █ █ L - List files in archive. █ █ X - Extract files from archive. █ █ T - Test - Extract files to NUL. █ █ D - Delete files from archive. █ █ Options (may appear anywhere on the command line): █ █ /v - verbose (L command) █ █ /a - maintain file attributes. (A, M or X) █ █ /s - collect/extract subdirs. (A, M or X) █ █ /o - no prompts. (L or X) █ █ (When used with X, /o will overwrite █ █ existing files without prompting) █ █ /i - ignore EAs. (A, M or X) █ █ /e - save/rest empty dirs & dir EAs(A, M or X) █ █ /m - store modified files only (A or M) █ █ /h - additional information. █ █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ ═══ 4.1. Commands ═══ ═══ 4.1.1. A - Add files to archive. ═══ Using the 'A' command will create an archive file if one does not exist already, or will append to one if it already exists. Example: [C:\] lh32 a xxx yyy (xxx is archive name, yyy is files to archive) LH2 V2.20 - Copyright (c) 1989-1993 A:Ware Inc. Max files = 13107 <--- This will show maximum allowable files per archive. Creating temp file AAABEB.TMP <--- This will only display during UPDATE for file integrity purposes. CREATING: test.lzh <--- This will either show CREATING or UPDATING Original Packed Rat Date Time Attr Type CRC Name -------- -------- --- ------- -------- ------ ----- ---- ---------------- xx% 23654 9146 39% 93-01-16 16:29:56 ...... -lh5- ADC5 lh2.ipf -------- -------- --- ---------------- 23654 9146 39% 1 files. The xx% will show percentage increments for the duration of the operation. Options available with this command: /a - store file attributes /s - store/recurse subdirectories /i - ignore EAs /e - save empty directories and/or directory EAs /m - store modified files only ═══ 4.1.2. M - Move files to archive (erase files). ═══ Using the 'M' command will create an archive file if one does not exist already, or will append to one if it already exists. Once the archive is complete, the original files will be deleted. Example: [C:\] lh32 M xxx yyy (xxx is archive name, yyy is files to archive) LH2 V2.20 - Copyright (c) 1989-1993 A:Ware Inc. Max files = 13107 <--- This will show maximum allowable files per archive. Creating temp file AAABEB.TMP <--- This will only display during UPDATE for file integrity purposes. CREATING: test.lzh <--- This will either show CREATING or UPDATING Original Packed Rat Date Time Attr Type CRC Name -------- -------- --- ------- -------- ------ ----- ---- ---------------- xx% 23654 9146 39% 93-01-16 16:29:56 ...... -lh5- ADC5 lh2.ipf -------- -------- --- ---------------- 23654 9146 39% 1 files. The xx% will show percentage increments for the duration of the operation. Options available with this command: /a - store file attributes /s - store/recurse subdirectories /i - ignore EAs /e - save empty directories and/or directory EAs /m - store modified files only ═══ 4.1.3. L - List files in archive. ═══ Using the 'L' option will list the original file size, the file date, and the file name to your screen. This example was invoked with the following command: [C:\] LH32 L ARCHIVE.LZH Listing archive: C:\ARCHIVE.LZH Original Date Name -------- -------- ----------------------------------------- 21578 92-12-27 file.txt -------- ----------------------------------------- 21578 1 files. Options available with this command: /v - verbose ═══ 4.1.4. X - Extract files from archive. ═══ Using the 'X' command will extract a file(s) from an archive. [C:\]LH2 X LH2INF <--- May contain wildcards, multiple files, etc. LH2 V2.20 - Copyright (c) 1989-1993 A:Ware Inc. Extracting archive: C:\lh2\LH2INF.LZH Original Date Name -------- -------- ----------------------------------------- 21578 92-12-27 test.exe -------- -------- ----------------------------------------- 21578 1 files. Applying Extended Attributes from 'C:\lh2\LH2INF.LZH': If any Extended Attributes are attached to the file, they will be extracted and attached automatically. Options available with this command: /a - restore file attributes /s - extract into sub-directories /o - no prompts (Overwrite existing files without asking) /i - don't restore EAs /e - restore empty dirs and dir EAs ═══ 4.1.5. T - Test - Extract files to NUL. ═══ Using the 'T' command will extract a file(s) from an archive to NUL. You will still see the incremental percent sign '%' but no files will be created in your current directory. It is assumed the archive is ok if the file(s) extract completely without errors. ═══ 4.1.6. D - Delete files from archive. ═══ Using the 'D' command will delete file(s) from an archive. A temporary file with the extension of '.$LH' will be created and deleted if the program completes successfully. [C:\]LH2 D LH2INF *.lst <--- May contain wildcards, multiple files, etc. ═══ 4.2. Options ═══ ═══ 4.2.1. /v - verbose ═══ This option will give you more statistics about the file during the operation, ie; time and date information, ratios, etc. ═══ 4.2.2. /a - maintain file attributes. ═══ This option will extract/store file attributes: When the List command is used, LH/2 uses the following characters to distinguish file attributes: 'H' for hidden. 'R' for write-only. 'S' for system. 'A' for archive. These dos-style file attibutes should not be confused with OS/2 Extended Attributes (EAs). EAs are used to store information such as icons, bitmaps, file descriptions, etc. For more information about file attributes see the OS/2 on-line reference for the 'ATTRIB.EXE' program. ═══ 4.2.3. /s - collect/extract subdirs. ═══ This option will extract/store subdirectory information. If the directory does not exist when you are extracting, you will be prompted if you wish to create the directory (the /O option will cause the directories to be created without prompting). ═══ 4.2.4. /o - no prompts. ═══ This option will supress all questions - allowing for unattended operation. During Listing, this will prevent the "More?" prompt. During Extraction, this will cause directories to be created automatically, and existing files to be overwritten. ═══ 4.2.5. /i - ignore EAs. ═══ This option will, when extracting or archiving, will ignore all Extended Attributes for files. Therefore, when used with the ADD command, EAs will not be stored in the archive. When used with the EXTRACT command, any EAs in the archive will not be applied to their associated files. ═══ 4.2.6. /e - save/restore empty directory & dir EAs. ═══ This option will extract/store empty directories and directory Extended Attributes. ═══ 4.2.7. /m - store modified files only. ═══ This option will only store files that have the 'A' (archive) attribute set. After successful storage, LH/2 resets the 'A' (archive) attribute. OS/2 automatically sets the 'A' attribute whenever a file is modified. ═══ 4.2.8. /h - additional information. ═══ Examples: 1) LH2 A PROGRAMS \usr\*.c D:\*.h /s Collect all *.c files from \usr (and children of \usr), as well as all of the *.h files from every directory on drive D:. 2) LH2 X PROG* Extract all archives matching prog*.lzh into the current dir. Any path information in the archives will be ignored. 3) LH2 X PROG* e:\home *.c As in 2, but extract files into E:\HOME (dir must exist). Only extract files matching *.c. 4) LH2 X PROG* e:\home *.c /s As in 3, but path information WILL be kept. Directories will be created off of e:\home as needed. 5) LH2 X PROG* e:\home src\*.c /s As in 4, but only files that were collected from a src\ subdirectory will be extracted. ie: In LZH file Extracted to ----------- ------------- read.c NOT extracted. work\test.c NOT extracted. work\src\swell.c e:\home\work\src\swell.c buggy\work\src\turbo.c e:\home\buggy\work\src\turbo.c ═══ 5. SE.EXE The Self Extracting Program ═══ █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ █ Lh/2 (Self Extractor) Peter Fitzsimmons 93/02/01 █ █ Version 2.20 █ █ Usage: prog.exe [file1 file2 ...] [options] █ █ Purpose: Extract compressed files. █ █ Options: /l - list only (do not extract) █ █ /t - test only (do not extract) █ █ /v - verbose █ █ /a - set file attributes (hidden/system/etc) █ █ /o - overwrite existing files without asking █ █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ To create a self-extracting (SE) OS/2 lzh file, make sure se.exe is in the current directory when you run the MSE.CMD batch file: MSE Do not specify the extension .lzh. You must have already created the lzh archive before running MSE.CMD. Example: Step 1, create archive: LH A TEST *.C Step 2, create EXE : MSE TEST When a SE-LZH extracts, it is equivalent to running "LH X TEST /SE" The SE program is written entirely in C. It is therefore much larger than some competing products, which are written in assembler. We had no plans on releasing an SE because of this; but we have bent to user requests that did not care how big the SE module is. ═══ 5.1. MSE.CMD OS/2 Command File ═══ @echo off if "%1"=="" goto USAGE copy /b se.exe+%1.lzh /b %1.exe && echo %1.EXE has been created. goto end :Usage echo Usage: MSE [lzh file] echo Do NOT speficy .lzh extension. :end ═══ 6. Backup of OS/2 2.00 Desktop ═══ Backup of OS/2 2.00 Desktop The following procedure has worked well during testing. Use at your own risk. - To backup your OS/2 2.0 desktop, use the following command, from the root directory of your boot drive (this is for HPFS!): lh a desktop.lzh \os2\os2.ini \os2\os2sys.ini "os!2 2.0 desktop\*" /se You CAN run this while OS/2 is running -- however, try not to run any other programs or move anything on the desktop while this is running. You're best to run it from a Full Screen command prompt. To restore your desktop, you will have to boot from another disk and run (from the ROOT dir): lh x desktop.lzh /se ═══ 7. Warnings ═══ Warnings - Do not use very long file names (>64 bytes) for archives that will be distributed publicly (on an Electronic BBS, for example). These long file names do not work well with the old FAT file system, and do not work AT ALL with DOS. In fact, the DOS LHA program that is required to extract the archive, may "crash" on the long file names. If the archive is for your own use, or, if a public archive, it's use is clearly only for OS/2 users using the HPFS file system, than you can disregard this warning. - If you store a dir with an EA, dos and old LH/2 will not be able to extract the archive correctly (the dirs will be extracted as a file, preventing that dir from being created). ═══ 8. Hints ═══ Hints - Think of LH as "XCOPY" with a transitional state: the *.lzh file. Many of the options are the same as xcopy. The same options must be used during both collection and extraction to end up with the same layout that you started with. To get EXACTLY what is on your disk (including file hidden/system/archive attributes), you would do this: copy in: lh a myarchive /s /e /a (this will work too: lh a myarchive /sea) copy out: lh x myarchive /s /e /a Both of the above commands start from the current directory. If the current directory is the root, your whole disk would be stored. This is NOT recommended: lh a mydrives c:\* d:\* e:\* /se Since the drive letters are always removed when stored in an archive, after extraction all of your files would end up on one disk. ═══ 9. Acknowledgements ═══ Acknowledgments This program is based on the LZH (Lempel-Ziv-Huffman) compression method developed by Haruhiko Okumura and Haruyasu Yoshizaki. The compression routines were derived from the uncopyrighted LZHUF.C, posted by Haruhiko Okumura. The file format (*.lzh) is compatible with LHARC, the MSDOS archiver by Haruyasu Yoshizaki. The format of LHARC files was learned from the public domain LHX.H (LHX is a *.lzh file repair utility) by Mark Armbrust.